23

» WarCraft 3 / вылетает карта кампании

Похожие вопросы:

ответ
десинк вероятнее всего
нужен дебаг и реплей
а вообще берёшь прогу для записи лога и смотришь с ней реплей
так узнаёшь где вылет
ответ
Halian Izverg:
Может, все дело в переменных? Попробуй в настройках поставить галочку копировать переменные вместе с триггерами или, если не сработает для твоего глючного редактора, попробуй скопировать переменные вручную перед триггерами.
ответ
Лорд13:
Попробуйте перезагрузить компьютер, при загрузке компьютера нажать F8, чтобы вызвать меню выбора режимов загрузки ОС и выбрать "Загрузка последней удачной конфигурации (с работоспособными параметрами)". У меня сегодня тоже редактор стал вылетать при сохранении нестандартных объектов. Помогла перезагрузка с "загрузкой последней удачной конфигурации (с работоспособными параметрами)".
Потыкав разные кнопки во время F8 и ничего не нашёл. Там можно выбрать два пункта, которые просто загружают комп. К слову, windows 10
Да ладна, всё забейте. Как всегда, всё решилось само собой и методом тыка
Всех благодарю
ответ
XGM Bot:
Похожие вопросы:

ответ
Бэкапы надо было делать, мсье. Перед внесением каких-либо серьезных изменений.
ответ
Проблема решена.
ответ
Вообщем перенастроил Jass New Gen Pack карта как то по другому сохранилась с проверками и всё наладилось)


23

» WarCraft 3 / Вопрос по загрузочному экрану

Похожие вопросы:

ответ
Вообще-то и Texture manager и Sequence manager находятся в War3Modeleditor. "Windows" это не название ОС, это переводится как "окна".

23

» WarCraft 3 / Миникарта

Похожие вопросы:

ответ
Ладно, поставил разрешение в Варке на максимум, более или менее нормальный масштаб миникарт получается, всем спасибо за попытки помочь.
ответ
Вряд ли дело в ваших текстурах, скорее всего такова механика отображения миникарты. Но есть как минимум два способа заменить миникарту заранее заготовленным изображением: импорт файла war3mapMap.blp или новая функция BlzChangeMinimapTerrainTex (только для 1.31+).
ответ
~8gabriel8:
Это пинг, но ты указал, что он через Alt, чего прежде не делал, потому и удивился. Ну вот всех врагов на карте выбираешь и пинг им ставишь)
ответ
Если у юнита есть способность рудника, то иконку не скрыть через РО. Есть функция альтернативной иконки на мини-карте. Она может быть только одна в карте. Импортируешь иконку с альфа-каналом (прозрачную):
SetAltMinimapIcon("war3mapImported\\InvisibleIcon.blp") -- .dds не видит
UnitSetUsesAltIcon(unit, true) -- принимает только созданного на карте юнита, не айди юнита из РО
-- всех юнитов можно перебрать через счетчик, например

Есть еще несколько баг репортов от игроков на форуме близзов о том, что этот параметр в РО не работает на версиях 1.32+:

23

» WarCraft 3 / Как создать невидимую способность?

Похожие вопросы:

ответ
способность никак
вместо способности должна быть покупка юнита
при покупке юнита смотрим владельца купленного юнита
это и будет игрок нажавший на иконку
после этого выбираем таверну и удаляем купленного юнита
ответ
Где-то я видел наработку с этими хр барами.
Найдётся в ресурсах пользователя JesusHipster.

23

» WarCraft 3 / Отследить ЛКМ

Похожие вопросы:

ответ
~8gabriel8:
Смотря что нужно, если ЛКМ нужно отслеживать только для выбора юнитов, указания цели способностей или установки точки сбора, то и стандартные функции 1.26 сгодятся, а если ещё и просто сам факт щёлкания в пустоту, то либо мемхак, либо новый патч.
как уже заметили выше

23

» WarCraft 3 / Таймер

Похожие вопросы:

ответ
Происходящее здесь напомнило мне один случай из моего далекого прошлого. В те времена я еще только начинал осваивать редактор. Одна из тем, которая меня заинтересовала и по которой мне не удалось найти достаточно полной информации - утечки. Тогда я пошел на один форум и задал простой вопрос о том, как определить наличие и степень серьезности утечек в карте, не перебирая весь код. В результате я получил тонну флуда и "ответ от профи", с которым все в итоге согласились - фрагмент кода с ценным указанием "если это число растет быстро - утечек много, если медленно - мало или нет вовсе". Код представлял из себя таймер с малым периодом, который создавал объект, брал его хендл, писал в чат и удалял объект, но был один нюанс - создаваемый объект утекал на каждой итерации таймера.
ответ
У тебя ошибка, фукнкцию которую ты хочешь вызвать должна находится выше места вызова.
Unholy_Shield_End должна быть описана выше чем Sosdanie_Shita_Act1

Ну и вовсе, тебе нужен не хендл ид юнита а таймера,ибо сохранять ты данные должен на таймер а не на юнита, когда таймер истечет и вызовет функцию, внутри этой функции у тебя будет работать функция GetExpiredTimer() - которая вернет тот таймер, который запустил эту функцию, это единственный обьект связывающий твой триггер и функцию Unholy_Shield_End, и разумеется GetTriggerUnit() - не будет работать в потоке таймера, т.к это функция реакция на событие триггера. Ты походу копипастишь код совершенно не вникая в принципы его работы.
ответ
Ну если у тебя через локалку что-то неправильно иногда работает, значит просто у тебя где-то ошибка (или ты вообще делаешь это не так).
Для того что бы работать парой таймер+юнит впринципе то больше ничего и не нужно - таймер и сам юнит. Но если у тебя должно запускаться параллельно несколько точно таких же таймеров, то тут может подойти массив таймеров (и массив юнитов). При срабатывании одного из таймеров ты можешь ссылаться на юнита записанного под тем же индексом массива ( unit[X] и timer[X] соответственно).
А ещё в триггер можно добавлять события на срабатывания новых таймеров.

23

» WarCraft 3 / Помощь в начале.

Похожие вопросы:

ответ
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
ответ
Постоянный харас хумана. Для начала проверить, есть ли у него экспанд. Если он собирается его основать - пытаться всячески сносить. Пытаться мешать крипингу (создавать скелетов жезлом, убивать побитых пехотинцев, ополчение коилом). Если хуману все же удалось построить экспанд, необходимо переходить в постоянную осаду, которая поддерживается с помощью пауков. Быстрый подъем до Т2 (Чертоги мертвых), после чего строится бойня и Лич, как второй герой (ДК - первый герой, кстати). При осаде стараться убить как можно больше пехотинцев. От экспанда лучше не отступать, так как хуман должен нести постоянные потери. При возможности убивать героя (но не сильно акцентировать на нем внимание; коил + нова, если герой хумана додыхает). Постоянно поттягивать статуи к экспанду и перебираться та Т3 (Темная Цитадель), после чего провести улучшения для сфинксов. Так как хуманы любят башни, необходимо статуи превратить в сфинксов и вынести ему башни (причем нужно каждого превратить отдельно и из следующей статуи вытащить всю ману; делать поочередно, не торопясь). Сплеш от ударов сфинксов снесет всех рабочих, которые попытаются реанимировать башни. После такого для хуманов игра завершается поражением. Главное все сделать правильно и последовательно.
ответ
Вот она... Я именно с неё начинал играть в Warcraft III.
ответ
Про выключение ручных сейвов ничего не могу сказать, а второй пункт решается созданием кастомного меню выхода через диалог, где ты сохраняешь игру через код. Только продолжать надо будет всё равно через загрузку игры.
ответ
мультиборд в карте на ГУИ? в гуи функциях внутри часто необнуляются локальные переменные объектов
если код то мб не используется MultiboardReleaseItem и итемы остаются висеть

23

» WarCraft 3 / Нужна помощь с триггером

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
xgm.guru/p/wc3/articles Попробуй сделать что-нибудь сам. Посмотри, что вообще там можно сделать. Если ты просишь сделать за тебе двухстрочный триггер - забей.
ответ
должен сразу предупредить что делать за тебя никто не будет
теперь по твоим вопросам
  1. чтобы нельзя было кликать скрываешь, даёшь москиты, делаешь видимым
  2. действие проиграть звук и указываешь твою фразу
  3. выбираем всех подходящих(враги,живые) юнитов в радиусе от точки каста и создаём по дамми юниту(юнит без модели, без атаки, с москитами, с нужной способность, время жизни юнита 1 сек) для каждого подходящего юнита приказывая дамми юниту применить нужную способность в подходящего юнита
таким образом каждый дамми юнит применит нужную способность (в твоём случае корни) в 1 подходящего юнита для которого он и был создан а потом исчезнет
  1. система отлова урона
  2. морф юнита либо орбы
всё что я не описал есть в статьях
тебе нужны первые 2 раздела ("Основы" и "Триггеры и объекты")
ответ
Вот, должно работать. Если понадобится временное подчинение - таймер поможет.
ответ
Afterdeath, ну если поймаешь меня сегодня-завтра в Discord'е (discord.gg/Rze5sGP), то могу сделать в лучшем виде.

23

» WarCraft 3 / Блок атаки

Похожие вопросы:

ответ
Спеллы: Сделать цель на мгновение неуязвимой, чтоб получилась иллюзия уклонения.
Авто-атаки: А что не так со "Змеиной ловкостью"?
ответ
Инициация: Выбрать всех юнитов на карте: добавить в группу, добавить в триггер событие: "выбранный юнит получает урон".
Тригг1: Юнит входит в область карты, если юнит не в группе, добавить в группу и добавить в триггер событие: "входящий юнит получает урон".
Тригг2: (Событие получения урона) Установить здоровье triggering unit = здоровье triggering unit + (damage taken / 2(50%))
Спасибо за помощь.
ответ
на определение сзади ли юнит есть функция
function IsUnitBack takes unit uF, unit uWhichBack returns boolean
        real r1 = bj_RADTODEG * Atan2(GetUnitY(uWhichBack) - GetUnitY(uF), GetUnitX(uWhichBack) - GetUnitX(uF)) + 360.
        real r2 = GetUnitFacing(uWhichBack) + 360.
           if GetUnitY(uWhichBack) < GetUnitY(uF) then
               set r1 = r1 + 360.
           endif
        return (r1<=(r2+45.) and r1>=(r2-45.))
    endfunction
ответ
EvilPenguin, ну без мемхака никак, так что забиваем...

23

» WarCraft 3 / Работает ли GetItemTypeId

Похожие вопросы:

ответ
Такое может произойти если функция не объявлена публичной
public function StatsSyncAll(unit owner)
    // Ра-та-та-та-та
По умолчанию, объявления внутри пакета приватные.
P.S. в Wurst лучше придерживаться стиля Wurst. То бишь, имена функций и переменных следует начинать с маленькой буквы
public function  statsSyncAll(unit owner)

23

» WarCraft 3 / Таймер вместо вейта

Похожие вопросы:

ответ
Юзать структуры, свои собственные системы хранения данных.
Если вы только решили слезть с гуи+ вейты на jass, то вам рано думать о таком.
Таймер + хештаблицы в помощь, в статьях есть много информации на эту тему.
Что вам еще непонятно?
ImbaStyle, что есть TriggerSleepActions и timer вам известно?
ответ
Нельзя просто использовать таймер вместо вейта посередине триггера (гуишный вейт именно так и работает - запускает таймер и проверяет циклом каждые 0.1 сек пока он не пройдет).
Но если так уж нужно узнать истек ли таймер:
Real comparison - Обратный отсчет - Remaining time for timer (оставшееся время таймера)

23

» WarCraft 3 / Контратака

Похожие вопросы:

ответ
Без Футболочки:
Уже давно забыл что такое варкрафт и как выглядят тригерры но попробую объяснить по кривому)
Через событие юнит атакован выставляй шанс на то что даммик бафнет героя дамми бафом который даёт лайф стил и атак спид...
Как-то так)
Более подробно и правильно объяснить не смогу т.к ничерта не помню)
ответ
Неуязвимость проверяют через даммика с атакой, через приказ, сможет ли атаковать или нет, просто проверка выполнения приказа. Так же пытаются нанести урон и смотрят сколько он отнял здоровья, так можно и определить неуязвимость и вычислить резист юнита к конкретному типу урона.

23

» WarCraft 3 / Отлов точки приказа постройки

Похожие вопросы:

ответ
Можно дать юниту какую-нить абилку и все время через Force UI Key заставлять игрока ее нажимать пока этот юнит выбран
И как только он эту абилку использует, значит меню закрыто
ответ
Так ведь в редакторе объектов есть строчка "Пути - требование к расположению". Там можно просто поставить галочку "Неиспорченный" и построить это здание на порченной земле будет уже нельзя.

23

» WarCraft 3 / Строка и переменная тип юнита

Похожие вопросы:

ответ
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local unit s=GetEventDamageSource()
    local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
    local texttag tt=CreateTextTag()
    local real dmg=GetEventDamage()

    if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
        if GetPlayerId(GetOwningPlayer(u))==12 then
            call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
        else
            call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
        endif
        call SetTextTagPosUnit(tt, u, 0)
        call SetTextTagColor(tt, 255, 255, 255, 255) 
        call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 1.0)
        call SetTextTagFadepoint(tt, 0.0)
    endif
    call PolledWait(2.0)

    call DestroyTextTag(tt)
    set u=null
    set s=null
    set i=0
    set dmg=0
    set tt=null
endfunction

function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
    call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction

function theSDMSTriggerActions takes nothing returns nothing
    local trigger UnitEnter=CreateTrigger()

    call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
    call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)

    set UnitEnter=null
endfunction

function InitTrig_the_SDMS_Trigger takes nothing returns nothing
    local trigger tr=CreateTrigger()

    set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
    call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
    call TriggerRegisterTimerEventSingle(tr,0.0)
    call TriggerAddAction(tr,function theSDMSTriggerActions)

    set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
ответ
сделать базу даных по названию...
строка[1] = "пехотинец"
строка[2] = "паладин"
тип юнита[1] = пехотинец
тип юнита[2] = паладин
цыкл
если введенная строка == строка[А]
создать юнита тип юнита[А]
ответ
МодификаторПал я так понимаю число, а не юнит...
local unit u
local real r
Это конкретно по ошибке... а вообще - не надо смотреть видео от этого человека, он тебя плохому научит... правда. А другим потом придётся тебя переучивать, если ты сам это дело не забросишь

23

» WarCraft 3 / Команда для игрока

Похожие вопросы:

ответ
По ходу не можно...
ответ
зрители и обсы не взаимодействуют ни с какими триггерами, они вне игры
ответ
один триггер
по одному событию на каждого игрока
в действе передавать "Переключающий игрок" вместо "игрок 1 красный".
ответ
~8gabriel8:
Есть в категории Игрок действие на смену цвета. Делаешь события, что игрок вводит в чат -color для всех игроков, куда добавляешь это действие.

23

» Администрация XGM / как получить уровень 1

Принятый ответ
Похожие вопросы:

ответ
Значит 3 раза понижали. Опыт может снятся только в одном из этих случаев:
  • ресурс снят с публикации который ранее был опубликован
  • проект снижен в уровне, который ранее был большего уровня
  • удален опубликованный комментарий / пост на форуме
  • ты написал сообщение в оффтопку на форуме (за каждый пост -1 опыта)
  • ну и самый редкий вариант ,если какой то модератор пользуюсь служебным положением заабузит админку и начислит н-ое кол-во опыта определенному юзера, мы это спалим и снимем опыт назад.
ответ
любой абуз видно в логах. Там ничего не абузилось.

23

» Администрация XGM / как получить мне уровень в этом сайте

Похожие вопросы:

ответ
Значит 3 раза понижали. Опыт может снятся только в одном из этих случаев:
  • ресурс снят с публикации который ранее был опубликован
  • проект снижен в уровне, который ранее был большего уровня
  • удален опубликованный комментарий / пост на форуме
  • ты написал сообщение в оффтопку на форуме (за каждый пост -1 опыта)
  • ну и самый редкий вариант ,если какой то модератор пользуюсь служебным положением заабузит админку и начислит н-ое кол-во опыта определенному юзера, мы это спалим и снимем опыт назад.

23

» WarCraft 3 / Собственные характеристики для героя

Похожие вопросы:

ответ
Уровень = Уровню героя. Характеристики = Характеристикам героя. Цикл 6-разовый на каждый слот дающий предмет герою. Уровни способностей равные уровню способностей героя. Героя, в смысле твоего героя. Ну еще создать юнита типа твоего героя. Что-то еще? Если он где-то в переменных для пассивок, то с ними тоже по колдовать и все.
Будет только одна проблема, если ты книги атаки на его юзал то их никак не засеч без геморроя. А так все в виде целочисленных на твоем герое записано.

23

» WarCraft 3 / Не удаляется способность

Похожие вопросы:

ответ
Nickol, оригиналы удалить нельзя
они хранятся не в карте в mpq
если так хочешь то удаляй оригинал из слк таблицы в архивах игры
ответ
на сколько я понял проблема в том что после смерти способность не удаляется
тогда нужен триггер с событием юнит умирает
и если юнит герой то удалять эту способность
Melissa:
Ну и если вдруг скилл используют одновременно или почти одновременно десятки юнитов - то не у всех панцирь будет корректно удаляться.
можно решить локалками
ответ
Ну хз, ручками удали скилл слк или тхт, хз как там у тебя, после деоптимизации карты (снятия защиты) часто бывают баги с обьектными данными, попробуйте другой деоптимизатор, или правьте ручками...
ответ
Делай call UnitMakeAbilityPermanent(u, true,'A000') ) .
Где вместо A000 твоя абилка.
Если абила спеллбучная, то все спеллбуки тоже надо вживлять.
Перманент-абилы не пропадают после морфа и анморфа. Просто добавленные - пропадают.
ответ
А ты её так не удалишь, нужно саму книжку удалять

23

» WarCraft 3 / Помогите разобраться с опытом

Похожие вопросы:

ответ
Ну что пацаны Datamanager ?
Дам подсказку, смотреть на систему ливов и сыгранный игр, там переменная сама инкрементируется за каждый запуск игры, и сама подгружается, но надо включить локальные файлы и сделать привязку к нику и зашифровать данные, ибо иначе тут всё в открытом виде, можно сбрасывать значение

23

» WarCraft 3 / Утекает ли область?

Похожие вопросы:

ответ
Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).